//
// Created by 吴竹亚 on 2023/3/15.
//
#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int no;
    int score;
} Stu;

typedef struct QueueNode {
    Stu *stu;
    struct QueueNode *next;
} QueueNode, *LinkQueue;

void initQueue(LinkQueue &linkQueue) {
    linkQueue = new QueueNode;
    linkQueue->stu = NULL;
    linkQueue->next = NULL;
}

void deleteLinkQueue(LinkQueue &linkQueue, Stu &stu) {
    if (linkQueue->next != NULL) {
        stu = *linkQueue->next->stu;
        linkQueue->next = linkQueue->next->next;
    }
}

void enterLinkQueue(LinkQueue &linkQueue, Stu &stu) {
    LinkQueue p1 = linkQueue;
    for (; p1->next != NULL; p1 = p1->next) {
    }
    LinkQueue p2 = new QueueNode;
    p2->next = NULL;
    p2->stu = &stu;
    p1->next = p2;
}

void initValue(LinkQueue &linkQueue) {
    for (int i = 0; i < 10; ++i) {
        Stu *stu=new Stu;
        stu->no = i + 43;
        stu->score = 100 - i * 10;
        enterLinkQueue(linkQueue, *stu);
    }
}

void show(LinkQueue &linkQueue) {
    LinkQueue p = linkQueue;
    for (int i = 0; p->next; ++i) {
        p = p->next;
        printf("the %d stu, no is %d, score is %d\n", i+1, p->stu->no, p->stu->score);
    }
}

int main() {
//定义一个循环队列
    LinkQueue linkQueue;
    initQueue(linkQueue);
    //将十个同学信息入队
    initValue(linkQueue);
    //输出所有数据
    show(linkQueue);
    printf("-============================\n");

    //出队一个数据元素，
    Stu s1;
    deleteLinkQueue(linkQueue, s1);
    printf("the delete stu, no is %d, score is %d\n", s1.no, s1.score);
    //输出所有数据
    show(linkQueue);
    printf("-============================\n");

    //入队一个数据元素（自己学号-1）同学
    Stu s2 = {42, 3};
    enterLinkQueue(linkQueue, s2);
    //输出所有数据
    show(linkQueue);
    printf("-============================\n");


    //入队一个数据元素（自己学号-1）同学
    Stu s3 = {41, 2};
    enterLinkQueue(linkQueue, s3);
    //输出所有数据
    show(linkQueue);
}